// Datum                                Naam programmeur
//   Beschrijving                         Storynummer
//======================================================
// 19/11/2013                           Leys Thomas (c1026794)
//   Creatie MaakETicketService           UC 11.1 S01
// 23/11/2013                           Leys Thomas (c1026794)
//   Maak XML file aan                    UC 11.1 S03
// 24/11/2013                           Leys Thomas (c1026794)
//   Voeg extra velden toe aan XML        UC 11.1 S03
// 25/11/2013                           Leys Thomas (c1026794)
//   Formateren van de XML                UC 11.1 S03
// 18/01/2014                           Leys Thomas (c1026794)
//   Aanpassingen aan zitplaatsgegevens   UC 11.1 S03

package core.logic.services;

import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;

import com.sun.xml.internal.txw2.output.IndentingXMLStreamWriter;

import core.logic.dataAccess.ETicketDAO;
import core.models.dataModels.createModels.MaakETicketModel;
import core.models.domainModel.ETicket;

public class MaakETicketService {
	public static MaakETicketModel getMaakETicketModel(int passagierId) {
		// Maak nieuw model aan
		MaakETicketModel model = new MaakETicketModel();
		
		// Koppel de gegevens van de database aan het model.
		model.set_eTicket(ETicketDAO.getETicket(passagierId));
		
		// Stuur het model terug naar de controller
		return model;
	}
	
	public static boolean maakXmlFileAan(MaakETicketModel model) {
		boolean creatieGelukt = false;
		ETicket ticket = model.get_eTicket();
		
		XMLOutputFactory output = XMLOutputFactory.newInstance();
		try {
			FileWriter file = new FileWriter("z.xml/" + ticket.getTicketNummer() + ".xml");
            XMLStreamWriter writer = new IndentingXMLStreamWriter(output.createXMLStreamWriter(file));
            
            // Write the XML file
            writer.writeStartDocument("1.0");                                              // <?xml version="1.0"?>
            writer.writeStartElement("E-ticket");                                          // <E-ticket>
            writer.writeStartElement("TicketNummer");                                      //    <TicketNummer>
            writer.writeCharacters(ticket.getTicketNummer() + "");                         //       Het ticketnummer
            writer.writeEndElement();                                                      //    </TicketNummer>
            writer.writeStartElement("Passagier");                                         //    <Passagier>
            writer.writeStartElement("Voornaam");                                          //       <Voornaam>
            writer.writeCharacters(ticket.getVoornaam());                                  //          De voornaam van de passagier
            writer.writeEndElement();                                                      //       </Voornaam>
            writer.writeStartElement("Achternaam");                                        //       <Achernaam>
            writer.writeCharacters(ticket.getAchternaam());                                //          De achernaam van de passagier
            writer.writeEndElement();                                                      //       </Achternaam>
            writer.writeStartElement("PaspoortNummer");                                    //       <PaspoortNummer>
            writer.writeCharacters(ticket.getPaspoortNummer());                            //          Het paspoortnummer van de passagier
            writer.writeEndElement();                                                      //       </PaspoortNummer>
            writer.writeStartElement("Geboortedatum");                                     //       <Geboortedatum>
            writer.writeCharacters(ticket.getGeboortedatum());                             //          De geboortedatum van de passagier
            writer.writeEndElement();                                                      //       </Geboortedatum>
            writer.writeEndElement();                                                      //    </Passagier>
            writer.writeStartElement("Vlucht");                                            //    <Vlucht>
            writer.writeStartElement("VluchtId");                                          //       <VluchtId>
            writer.writeCharacters(Integer.toString(ticket.getVluchtId()));                //          Het ID van de vlucht
            writer.writeEndElement();                                                      //       </VluchtId>
            writer.writeStartElement("VluchtNummer");                                      //       <VluchtNummer>
            writer.writeCharacters(ticket.getVluchtNummer());                              //          Het nummer van de vlucht
            writer.writeEndElement();                                                      //       </VluchtNummer>
            writer.writeStartElement("Vertrek");                                           //       <Vertrek>
            writer.writeStartElement("LuchthavenCode");                                    //          <LuchthavenCode>
            writer.writeCharacters(ticket.getVertrekLuchthaven().getLuchthavenCode());     //             De code van de vertrekluchthaven
            writer.writeEndElement();                                                      //          </LuchthavenCode>
            writer.writeStartElement("LuchthavenNaam");                                    //          <LuchthavenNaam>
            writer.writeCharacters(ticket.getVertrekLuchthaven().getLuchthavenNaam());     //             De naam van de vertrekluchthaven
            writer.writeEndElement();                                                      //          </LuchthavenNaam>
            writer.writeStartElement("Tijdstip");                                          //          <Tijdstip>
            writer.writeCharacters(ticket.getVertrekTijdstip());                           //             Het tijdstip van vertrek
            writer.writeEndElement();                                                      //          </Tijdstip>
            writer.writeEndElement();                                                      //       </Vertrek>
            writer.writeStartElement("Aankomst");                                          //       <Aankomst>
            writer.writeStartElement("LuchthavenCode");                                    //          <LuchthavenCode>
            writer.writeCharacters(ticket.getAankomstLuchthaven().getLuchthavenCode());    //             De code van de aankomstluchthaven
            writer.writeEndElement();                                                      //          </LuchthavenCode>
            writer.writeStartElement("LuchthavenNaam");                                    //          <LuchthavenNaam>
            writer.writeCharacters(ticket.getAankomstLuchthaven().getLuchthavenNaam());    //             De naam van de aankomstluchthaven
            writer.writeEndElement();                                                      //          </LuchthavenNaam>
            writer.writeStartElement("Tijdstip");                                          //          <Tijdstip>
            writer.writeCharacters(ticket.getAankomstTijdStip());                          //             Het tijdstip van aankomst
            writer.writeEndElement();                                                      //          </Tijdstip>
            writer.writeEndElement();                                                      //       </Aankomst>
            if (ticket.getZitplaats().getZitplaatsType() != null || ticket.getZitplaats().getZitplaatsNaam() != null) {
            	writer.writeStartElement("Zitplaats");                                     //       <Zitplaats>
            	if (ticket.getZitplaats().getZitplaatsType() != null) {
            		writer.writeStartElement("Type");                                      //          <Type>
            		writer.writeCharacters(ticket.getZitplaats().getZitplaatsType());      //             Het type van de zitplaats (business of economy)
            		writer.writeEndElement();                                              //          </Type>
            	}
            	if (ticket.getZitplaats().getZitplaatsNaam() != null) {
            		writer.writeStartElement("Naam");                                      //          <Naam>
            		writer.writeCharacters(ticket.getZitplaats().getZitplaatsNaam());      //             Beschrijving van de zitplaats
            		writer.writeEndElement();                                              //          </Naam>
            	}
            	writer.writeEndElement();                                                  //       </Zitplaats>
            }
            writer.writeEndElement();                                                      //    </Vlucht>
            writer.writeEndElement();                                                      // </E-ticket>
            
            writer.flush();
            writer.close();
            
            creatieGelukt = true;
    	} catch (FileNotFoundException fnfe) {
    		fnfe.printStackTrace();
    	} catch (IOException ioe) {
    		ioe.printStackTrace();
    	} catch (XMLStreamException xmle) {
    		xmle.printStackTrace();
    	}
		
		return creatieGelukt;
	}
}
